package com.lock8;

import java.util.concurrent.TimeUnit;
/**
 *  7.一个静态同步方法，一个普通同步方法，1个对象， 2个线程先打印A 还是 B？ -> B
 *  static 锁-Class  2个方法锁的对象不同，不用等待锁释放。
 *  8.一个静态同步方法，一个普通同步方法，2个对象，2个线程先打印A 还是 B？ -> B
 *
 * */
public class Test4 {
    public static void main(String[] args) {
        //一个静态同步方法，一个普通同步方法
        //2个对象 如果都调用静态同步方法 则按一个Class类模板处理，谁先调用谁用
        //2个对象 都调用普通方法的话，则是2个锁 互不相干 按顺序来 。
        Data4 data4 = new Data4();
        Data4 data5= new Data4();
        new Thread(()->{
            data4.sendA();
            System.out.println("AAA");
        },"A").start();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
//        new Thread(data::sendB).start();
        new Thread(()->{
            data5.sendA();
            System.out.println("BBB");
        },"B").start();
    }
}
class Data4{

    //synchronized 锁的对象是方法的调用者
    // 静态同步方法 锁的Class
    public static synchronized void sendA(){
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("AA");
    }
    //普通同步方法 锁的调用者
    public synchronized void sendB(){
        System.out.println("BB");
    }
    public void hello(){
        System.out.println("hello");
    }
}